package com.mdhw.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mdhw.common.enums.StatusEnum;
import com.mdhw.config.R;
import com.mdhw.system.dao.SysDictTypeDao;
import com.mdhw.system.entity.SysDictData;
import com.mdhw.system.entity.SysDictType;
import com.mdhw.system.service.SysDictDataService;
import com.mdhw.system.service.SysDictTypeService;
import com.mdhw.system.vo.YonghuXieyiVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeDao, SysDictType> implements SysDictTypeService {

    @Autowired
    private SysDictDataService sysDictDataService;
    /**
     * 增加 dictType
     * @param sysDictType
     * @return
     */
    @Override
    public R<String> addDictType(SysDictType sysDictType) {
        String dictType = sysDictType.getDictType();
        LambdaQueryWrapper<SysDictType> sdtLqw = new LambdaQueryWrapper<>();
        sdtLqw.eq(SysDictType::getStatus, StatusEnum.OK.getCode().toString());
        sdtLqw.eq(SysDictType::getDictType,dictType);
        List<SysDictType> sysDictTypeList = this.list(sdtLqw);
        if(sysDictTypeList != null && sysDictTypeList.size() > 0){
            return R.error("dictType 重复!");
        }else{
            boolean isSuccess = this.save(sysDictType);
            if(isSuccess){
                return R.success("新增成功!");
            }else{
                return R.error("新增失败!");
            }
        }
    }


    /**
     * 修改 dictType
     * @param sysDictType
     * @return
     */
    @Override
    public R<String> updateDictType(SysDictType sysDictType) {
        String dictType = sysDictType.getDictType();
        Long id = sysDictType.getId();
        LambdaQueryWrapper<SysDictType> sdtLqw = new LambdaQueryWrapper<>();
        sdtLqw.eq(SysDictType::getStatus,StatusEnum.OK.getCode().toString());
        sdtLqw.eq(SysDictType::getDictType,dictType);
        sdtLqw.ne(SysDictType::getId,id);
        List<SysDictType> sysDictTypeList = this.list(sdtLqw);
        if(sysDictTypeList != null && sysDictTypeList.size() > 0){
            return R.error("dictType 重复!");
        }else{
            SysDictType nativeSysDictType = this.getById(sysDictType.getId());
            BeanUtils.copyProperties(sysDictType,nativeSysDictType);
            boolean isSuccess = this.updateById(nativeSysDictType);
            if(isSuccess){
                return R.success("修改成功!");
            }else{
                return R.error("修改失败!");
            }
        }
    }

    /**
     * 删除数据字典 Type
     * @param id
     * @return
     */
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public R<String> deleteDictType(Long id) {
        SysDictType sysDictType = this.getById(id);
        String dictType = sysDictType.getDictType();
        sysDictType.setStatus(StatusEnum.DELETE.getCode());
        boolean isSuccess = this.updateById(sysDictType);
        if(isSuccess){
            LambdaQueryWrapper<SysDictData> sddLqw = new LambdaQueryWrapper<>();
            sddLqw.eq(SysDictData::getStatus,StatusEnum.OK.getCode());
            sddLqw.eq(SysDictData::getDictType,dictType);
            List<SysDictData> sysDictDataList = this.sysDictDataService.list(sddLqw);
            for(SysDictData sysDictData:sysDictDataList){
                sysDictData.setStatus(StatusEnum.DELETE.getCode());
            }
            this.sysDictDataService.updateBatchById(sysDictDataList);
        }
        return R.success("删除成功");
    }

    @Override
    public R<YonghuXieyiVo> selectYonghuXieyi() {
        YonghuXieyiVo yonghuXieyiVo = new YonghuXieyiVo();
        List<String> yinsixieyi = new ArrayList<>();
        yinsixieyi.add("隐私协议");
        yinsixieyi.add("生效日期：2024年12月1日");
        yinsixieyi.add("尊敬的数界聚宝用户:福州聚友量科技有限公司（以下亦称“数界聚宝”或“我们”）非常重视客户个人信息及隐私权的保护，因此我们制订了涵盖如何收集、存储、使用、共享和保护客户信息的隐私政策。《数界聚宝隐私政策》(以下简称“本隐私政策”) 适用于数界聚宝。");
        yinsixieyi.add("请仔细阅读本隐私政策的全部条款，确认您已完全了解我们对您个人信息的处理规则，并作出您认为适当的选择。阅读过程中，如您有任何疑问，可联系我们的客服，如您不同意协议中的任何条款，您应立即停止访问或使用数界聚宝小程序。");
        yinsixieyi.add("第一部分 定义");
        yinsixieyi.add("个人信息:指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息。");
        yinsixieyi.add("个人信息删除:指在实现日常业务功能所涉及的系统中去除个人信息的行为，使其保持不可被检索、访问的状态。");
        yinsixieyi.add("第二部分 本隐私政策将帮助您了解以下内容:");
        yinsixieyi.add("一、信息的收集和使用");
        yinsixieyi.add("二、我们如何使用Cookie和同类技术");
        yinsixieyi.add("三、我们如何共享、转让、公开披露您的个人信息");
        yinsixieyi.add("四、我们如何保护和保存您的个人信息");
        yinsixieyi.add("五、您如何管理您的个人信息");
        yinsixieyi.add("六、未成年人的个人信息保护");
        yinsixieyi.add("七、通知和修订");
        yinsixieyi.add("八、如何联系我们");
        yinsixieyi.add("八、如何联系我们");

        List<String> yonghuxieyi = new ArrayList<>();
        yonghuxieyi.add("用户协议");
        yonghuxieyi.add("生效日期：2024年12月1日");
        yonghuxieyi.add("提示：请您认真阅读并充分理解本《用户协议》（简称“本协议”）全部内容，");
        yonghuxieyi.add("特别是免除或者限制数界聚宝平台（简称“本平台”）运营方责任的免责条款以及对用户的权利限制条款，该部分内容将以加粗形式提示您注意，请您重点阅读。");
        yonghuxieyi.add("请您在认真阅读并充分理解本协议内容之后决定是否接受本协议。");
        yonghuxieyi.add("如您是未成年人（未满18周岁）或因智力等因素不具备完全民事行为能力的，须在法定监护人的陪同下阅读并决定是否接受本协议。仅在您及您的法定监护人完全接受本协议全部内容之后，您方可注册、及/或登录、及/或使用本平台提供的其他相关服务。您的注册、及/或登录、及/或使用本平台提供的其他相关服务的行为视为您及您的法定监护人对本协议全部内容的接受。");
        yonghuxieyi.add("本协议是您（下称“用户”）与数界聚宝平台合法运营方福州聚友量科技有限公司（简称“我们”）之间关于下载、安装、注册、登录、浏览潮享物平台以及使用潮享物平台购买商品及使用本平台提供的其他相关服务所订立的协议，本协议约定了我们与用户之间关于本平台服务方面的权利义务。“用户”是指下载、安装、注册、登录、浏览本平台或在本平台购买商品、使用本平台提供的其他相关服务的个人或组织。");
        yonghuxieyi.add("本协议内容可能根据本平台的业务调整而发生变更，用户可在本平台查阅最新版协议条款。更新后的协议条款一旦公布即代替原来的协议条款。协议条款更新后，如您不同意接受，您不应继续使用我们提供的服务。");
        yonghuxieyi.add("一、账号注册");
        yonghuxieyi.add("用户在使用本平台时由平台默认生成用户唯一数界聚宝账号，数界聚宝账号应当使用手机号码绑定注册，请用户使用尚未与数界聚宝账号绑定的手机号码，以及未被数界聚宝根据本协议封禁的手机号码注册数界聚宝账号。");
        yonghuxieyi.add("如果注册申请者有被数界聚宝封禁的先例或涉嫌虚假注册及滥用他人名义注册，及其他不能得到许可的理由，数界聚宝将拒绝其注册申请。");
        yonghuxieyi.add("用户不能修改系统自动分配给用户的ID。");

        yonghuXieyiVo.setYinsixieyi(yinsixieyi);
        yonghuXieyiVo.setYonghuxieyi(yonghuxieyi);
        return R.success(yonghuXieyiVo);
    }
}
